﻿using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using WP_Customer_ShopMob.Model;

namespace WP_Customer_ShopMob.Helper
{
   
    /// <summary>
    /// Classe permettant de communiquer avec le webService
    /// </summary>
    class WebServiceHelpers
    {
    
        /// <summary>
        /// methode pour récupérer une information en GET
        /// </summary>
        /// <param name="url">url à requeter</param>
        /// <param name="methodeToExec">Méthode qui traite le resultat</param>
        public void CallWebService(string url, ResultHandler methodeToExec)
        {
            //on instancie un webClient
            WebClient client = new WebClient();
            //On s'inscrit à l'evenement pour traiter le résultat
            client.DownloadStringCompleted += (o, e) =>
            {
                //Cas ou il n'y pas pas d'erreur, on transmet le résultat
                if (e.Error == null)
                    methodeToExec(e.Result, null);
                else
                    //Cas ou il y a une erreur, on transmet l'erreur
                    methodeToExec(null, e.Error);
            };
            //on lance la requete
            client.DownloadStringAsync(new Uri(url));

        }

        /// <summary>
        /// methode pour envoyer des information au serveur
        /// </summary>
        /// <param name="url">url à requeter</param>
        /// <param name="toSend">objet à envoyer</param>
        /// <param name="serialize">Si l'objet doit êttre serialiser en JSON ou non</param>
        /// <param name="methodeToExec">Méthode qui traite le resultat</param>
        public void CallWebService(string url, object toSend, bool serialize, ResultHandler methodeToExec)
        {
            //on traite l'objet a envoyer
            string s;
            if (serialize)
                s = JsonConvert.SerializeObject(toSend);
            else
                s = toSend.ToString();
            //on instancie un webClient
            WebClient client = new WebClient();
            //on indique que le contenu est du JSON
            client.Headers[HttpRequestHeader.ContentType] = "application/json";
            //On s'inscrit à l'evenement pour traiter le résultat
            client.UploadStringCompleted += (o, e) =>{
                //Cas ou il n'y pas pas d'erreur, on transmet le résultat
                if (e.Error == null)
                    methodeToExec(e.Result, null);
                else
                    //Cas ou il y a une erreur, on transmet l'erreur
                    methodeToExec(null, e.Error);

            };
            //on lance la requete
            client.UploadStringAsync(new Uri(url), "POST", s);
        }
    }
}
